package shark.flow.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.flowable.engine.runtime.ProcessInstance;
import shark.flow.model.Query;
import shark.flow.vo.ProcessInstanceQueryVo;
import shark.flow.vo.ProcessInstanceVo;
import shark.flow.vo.StartProcessInstanceVo;

import java.io.IOException;

public interface IFlowProcessInstanceService {
    /**
     * 启动流程
     *
     * @param param 参数
     * @return
     */
    ProcessInstance startProcessInstanceByKey(StartProcessInstanceVo param);

    /**
     * 查询流程实例列表
     *
     * @param params 参数
     * @return
     */
    IPage<ProcessInstanceVo> getInstancePage(ProcessInstanceQueryVo params);

    /**
     * 查询我发起的流程实例
     *
     * @param params 参数
     * @param query  分页参数
     * @return
     */
    IPage<ProcessInstanceVo> getMyProcessInstances(ProcessInstanceQueryVo params, Query query);

    /**
     * 获取流程图图片
     *
     * @param processInstanceId 流程实例id
     * @return
     */
    byte[] createImage(String processInstanceId) throws IOException;

    /**
     * 删除流程实例
     *
     * @param processInstanceId 流程实例id
     */
    void deleteProcessInstanceById(String processInstanceId);

    /**
     * 激活流程定义
     *  @param processInstanceId 流程实例id
     * @param suspensionState   2激活 1挂起
     */
    void suspendOrActivateProcessInstanceById(String processInstanceId, Integer suspensionState);

    /**
     * 终止流程
     * @param processInstanceId
     */
    void stopProcessInstanceById(String processInstanceId) ;

    /**
     * 撤回流程
     * @param processInstanceId
     * @return
     */
    String revokeProcess(String processInstanceId);
}
